--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vendor/rns_over_http/README-RU.md v4.8.1 (f6cc7b83) Text, 6.71 KB
Tc9d1d9# **RNS-over-HTTP**
Интерфейс Reticulum, который туннелирует трафик через стандартные HTTP/S POST-запросы. Это позволяет Reticulum работать в сетях, где разрешён только веб-трафик, эффективно обходя файрволы, DPI и другие ограничения.
Границы пакетов на HTTP-теле используют то же упрощённое HDLC-фреймирование, что и Ta5d6ff`PipeInterface` Reticulum, поэтому несколько пакетов могут передаваться в одном теле запроса или ответа без слияния.
[Tff7b72Не-GitHub-зеркало](Te6edf3https://lavaforge.org/Ivan/RNS-over-HTTP). Кроме того, файлы проекта доступны в сети Reticulum по адресу Ta5d6ff`RNS-over-HTTP`.
Tc9d1d9## **Обзор**
RNS-over-HTTP создаёт двунаправленный транспортный уровень, используя простую клиент-серверную модель:
Tff7b72* **Сервер**: Запускается на машине с публичным IP-адресом и прослушивает HTTP-запросы.
Tff7b72* **Клиент**: Может находиться за файрволом или NAT, ему требуется только исходящий доступ в интернет.
Клиент опрашивает сервер с помощью HTTP POST-запросов, отправляя исходящие данные в теле запроса и получая входящие данные в теле ответа. Это делает трафик похожим на обычную веб-активность.
Tc9d1d9## **Как это работает**
Интерфейс имитирует постоянное соединение, используя механизм, подобный long-polling:
Tff7b721. Клиент отправляет HTTP POST на сервер с ожидающими HDLC-фреймами в теле запроса.
Tff7b722. Сервер декодирует входящие пакеты для Reticulum и сразу возвращает исходящую очередь (тоже в HDLC) в теле ответа.
Tff7b723. Клиент принимает ответ, декодирует фреймы и передаёт пакеты в Reticulum.
Tff7b724. После настраиваемого интервала опроса клиент повторяет цикл.
Tc9d1d9## **Особенности**
Tff7b72* **Обход файрволов и DPI**: Туннелирует трафик через стандартные порты HTTP/S (80/443).
Tff7b72* **Двунаправленная связь**: Полнодуплексная передача данных.
Tff7b72* **Совместимое с Pipe фреймирование**: HDLC FLAG/ESC как у Ta5d6ff`PipeInterface`.
Tff7b72* **Простая настройка**: Python, Ta5d6ff`httpx`, Hypercorn/aioquic для HTTP/2–3 и Reticulum (Ta5d6ff`rns`).
Tff7b72* **Надёжность**: Повторное подключение с экспоненциальной задержкой.
Tff7b72* **Гибкость**: Настраиваемые MTU и интервал опроса.
Tff7b72* **Совместимость с прокси**: Caddy, Nginx и аналоги.
Tff7b72* **Повторное использование соединений**: keep-alive / мультиплексирование.
Tff7b72* **HTTP/1.1, HTTP/2 и HTTP/3**: Ta5d6ff`http_version = 1|2|3` (по умолчанию Ta5d6ff`1`).
Tc9d1d9## **Начало работы**
Tc9d1d9### **Требования**
Tff7b72* Python 3.10 или новее
Tff7b72* [Tff7b72Poetry](Te6edf3https://python-poetry.org/docs/#installation)
Tc9d1d9### **Установка**
Tff7b721. **Установите зависимости через Poetry** (из корня репозитория):
Ta5d6ff ```Ta5d6ffbash
poetry install
Ta5d6ff ```
Tff7b722. **Установите пользовательский интерфейс:** скопируйте Ta5d6ff`HTTPInterface.py` в каталог интерфейсов Reticulum, например Ta5d6ff`~/.reticulum/interfaces/`.
Tc9d1d9### **Тесты**
Ta5d6ff```Ta5d6ffbash
poetry run pytest -m Ta5d6ff"not live"
poetry run pytest -m live
Ta5d6ff```
Tc9d1d9## **Конфигурация**
Добавьте блок интерфейса в Ta5d6ff`~/.reticulum/config` на сервере и на клиенте. Поле Ta5d6ff`type` должно совпадать с именем модуля (Ta5d6ff`HTTPInterface`).
Tc9d1d9### **Конфигурация сервера**
Ta5d6ff```Ta5d6ffini
Tff7b72[[HTTP Server Interface]]
Te6edf3type Tff7b72= Ta5d6ffHTTPInterface
Te6edf3enabled Tff7b72= Ta5d6fftrue
Te6edf3mode Tff7b72= Ta5d6ffserver
Te6edf3listen_host Tff7b72= Ta5d6ff0.0.0.0
Te6edf3listen_port Tff7b72= Ta5d6ff8080
Te6edf3mtu Tff7b72= Ta5d6ff4096
Te6edf3check_user_agent Tff7b72= Ta5d6fftrue
Te6edf3user_agent Tff7b72= Ta5d6ffRNS-HTTP-Tunnel/1.0
Ta5d6ff```
Tc9d1d9### **Конфигурация клиента**
Ta5d6ff```Ta5d6ffini
Tff7b72[[HTTP Client Interface]]
Te6edf3type Tff7b72= Ta5d6ffHTTPInterface
Te6edf3enabled Tff7b72= Ta5d6fftrue
Te6edf3mode Tff7b72= Ta5d6ffclient
Te6edf3server_url Tff7b72= Ta5d6ffhttp://your-server-ip-or-domain:8080/
Te6edf3poll_interval Tff7b72= Ta5d6ff0.1
Te6edf3mtu Tff7b72= Ta5d6ff4096
Te6edf3user_agent Tff7b72= Ta5d6ffRNS-HTTP-Tunnel/1.0
Ta5d6ff```
Tc9d1d9## **Параметры конфигурации**
Tc9d1d9### Общие
Tff7b72* Ta5d6ff`mtu`: максимальный размер пакета в байтах (по умолчанию Ta5d6ff`4096`)
Tff7b72* Ta5d6ff`user_agent`: строка User-Agent (по умолчанию Ta5d6ff`RNS-HTTP-Tunnel/1.0`)
Tc9d1d9### Режим сервера
Tff7b72* Ta5d6ff`mode = server`
Tff7b72* Ta5d6ff`listen_host` (по умолчанию Ta5d6ff`0.0.0.0`)
Tff7b72* Ta5d6ff`listen_port` (по умолчанию Ta5d6ff`8080`)
Tff7b72* Ta5d6ff`check_user_agent` (по умолчанию Ta5d6ff`true`)
Tff7b72* Ta5d6ff`serve_html_page` / Ta5d6ff`html_file_path`: необязательная HTML-страница на GET Ta5d6ff`/`
Tc9d1d9### Режим клиента
Tff7b72* Ta5d6ff`mode = client`
Tff7b72* Ta5d6ff`server_url` (обязателен)
Tff7b72* Ta5d6ff`poll_interval` (по умолчанию Ta5d6ff`0.1`)
Tff7b72* Ta5d6ff`http_version = 1|2|3` (по умолчанию Ta5d6ff`1`)
Tff7b72* для Ta5d6ff`2` и Ta5d6ff`3`: Ta5d6ff`https://`, на сервере Ta5d6ff`tls_certfile` / Ta5d6ff`tls_keyfile`
Tff7b72* Ta5d6ff`tls_verify` / Ta5d6ff`tls_ca_certs` на клиенте
Tff7b72* Ta5d6ff`pool_connections` / Ta5d6ff`pool_maxsize` / Ta5d6ff`keepalive_timeout`
Tc9d1d9## **Обратный прокси (пример Caddy)**
Ta5d6ff```Ta5d6ffcaddy
example.yourdomain.com Tb4b4b4{
Tff7b72reverse_proxy 127.0.0.1:8080
Tff7b72header Tb4b4b4{
-Server
X-Content-Type-Options nosniff
Tb4b4b4}
Tb4b4b4}
Ta5d6ff```
Tc9d1d9## **Безопасность**
Tff7b72* Используйте HTTPS там, где возможно.
Tff7b72* По умолчанию сервер проверяет User-Agent. Задайте одинаковый Ta5d6ff`user_agent` на обеих сторонах или отключите проверку через Ta5d6ff`check_user_agent = false`.
Tc9d1d9## **Лицензия**
Проект распространяется под [Tff7b72лицензией MIT](Te6edf3LICENSE).
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────